package org.graduation.recruitment.utils;

import org.springframework.stereotype.Component;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * 加密类。提供加密功能，主要使用MD5算法。
 */
@Component
public class Encrypt {

    private static final String SALT = "ikdlai"; // 盐值，用于增强加密强度

    /**
     * 使用MD5算法对字符串进行32位加密。
     *
     * @param str 需要加密的字符串。
     * @return 经过MD5加密并转为32位十六进制字符串的结果。
     */
    public String md5_32(String str) {
        try {
            // 获取MD5算法的MessageDigest实例
            MessageDigest md = MessageDigest.getInstance("MD5");
            // 用输入的字节更新摘要，加入盐值以增强加密的复杂度
            md.update(str.getBytes());
            md.update(SALT.getBytes());
            // 完成哈希计算
            byte[] digest = md.digest();
            // 将哈希结果转换为十六进制字符串
            StringBuilder sb = new StringBuilder();
            for (byte b : digest) {
                sb.append(String.format("%02x", b & 0xff));
            }
            return sb.toString();
        } catch (NoSuchAlgorithmException e) {
            // 如果MD5算法不可用，则抛出运行时异常
            throw new RuntimeException("MD5 algorithm is not available", e);
        }
    }
}